package cn.org.cute.ebocy.util;

import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Properties;



/**
 * 读取conf.prop的处理类
 * @Copyright©2011, 2011 EBO CHANGYOU Co.td. All rights reserved.
 * @Version 1.0.0
 * @since jdk1.6
 * @author xiaolei
 * @date 2011-12-6
 */
public class OpenConfig {
	private static Properties props = null ;

	private static OpenConfig me = null ;
	private String encoding = "utf-8";

	public synchronized static OpenConfig getInstance() {
		if (me == null) {
			me = new OpenConfig();
		}
		return me;
	}

	private OpenConfig(){
		reConfigure();
	}

	/**
	 * 重新装载配置文件
	 */
	public void reConfigure() {
		props = new Properties();
		try {
			// -----------------
			// this.getClass() 方法后如果增加 getClassLoader()方法,则路径会变成classpath路径
			// 此种状况下conf.prop 不需要以/开头.
			// 如果没有增加getClassLoader()则获取当前class所在目录.
			// 经查证,增加getClassLoader()方法会增加额外的开销.建议使用
			// this.getClass().getResourceAsStream("/conf.prop") 方式获取资源文件
			// ------------ by 马飞
			InputStream resourceAsStream = this.getClass().getResourceAsStream("/apiconfig/apiconfig.prop");
			if (resourceAsStream != null)
				props.load(resourceAsStream);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public String getProperty(String key){
		String value = props.getProperty(key);
		if(value != null){
			try {
				value =	new String(value.getBytes("ISO8859-1"),encoding);
			} catch (Exception e) {
			}
		}
		return value;


	}

	/**
	 * 是否使用数据库分布式缓存
	 * @return
	 */
	public boolean useDistributedDbCache(){
		String s = props.getProperty("IS_USE_DISTRIBUTED_DB_CACHE");
		if("true".equalsIgnoreCase(s))return true;
		return false;
	}

	/**
	 * 得到log4j配置文件的路径
	 * @return
	 */
	public String getLog4jPath(){
		return props.getProperty("LOG4J_PATH");
	}

	/**
	 * 数据库是否需要记日志
	 * @return
	 */
	public boolean isLog(){
		String s = props.getProperty("IS_LOG");
		if("true".equalsIgnoreCase(s))return true;
		return false;
	}

	/**
	 * 数据库的增删改是否记录日志，便于查询
	 * @return
	 */
	public boolean isDbLog(){
		String s = props.getProperty("IS_DB_LOG");
		if("true".equalsIgnoreCase(s))return true;
		return false;
	}

	/**
	 * 得到对象缓存最大长度
	 * @return
	 */
	public int getMaxOmCacheLength(){
		String c = props.getProperty("OM_CACHE_LENGTH");
		return Integer.parseInt(c);
	}

	/**
	 * 得到列表缓存最大长度
	 * @return
	 */
	public int getMaxListCacheLength(){
		String c = props.getProperty("LIST_CACHE_LENGTH");
		return Integer.parseInt(c);
	}

	/**
	 * 长度缓存的最大length
	 * @return
	 */
	public int getMaxLengthCacheLength(){
		String c = props.getProperty("LENGTH_CACHE_LENGTH");
		return Integer.parseInt(c);
	}

	/**
	 * 二级缓存的最大长度
	 * @return
	 */
	public int getMaxSecondaryCacheLength(){
		String c = props.getProperty("SECONDARY_CACHE_LENGTH");
		return Integer.parseInt(c);
	}

	/**
	 * 数据库缓冲更新时间，尤其在update一个帖子的点击数时尤为必要。
	 * @return
	 */
	public int getUpdateInterval(){
		String c = props.getProperty("UPDATE_INTERVAL");
		return Integer.parseInt(c);
	}

	/**
	 * memcached过期时间，10分钟左右即可，因为还有一级缓存，所以远程缓存的时间不用太长。
	 * @return
	 */
	public long getMemCachedExpire(){
		String c = props.getProperty("MEMCACHED_EXPIRE_TIME");
		return Integer.parseInt(c);
	}

	/**
	 * server端的udp端口
	 * @return
	 */
	public int getUdpServerPort(){
		String c = props.getProperty("UDP_SERVER_PORT");
		return Integer.parseInt(c);
	}

	/**
	 * server端的udp服务器ip
	 * @return
	 */
	public String getUdpServerIp(){
		String ip = props.getProperty("UDP_SERVER_IP");
		return ip;
	}

	/**
	 * 得到需要广播的地址列表
	 * @return
	 */
	public InetAddress[] getNotifyInetAddressList(){
		String c = props.getProperty("NOTIFY_IP_LIST");
		if(c==null||c.length()==0)return null;
		String[] ips = c.split(";");
		ArrayList<InetAddress> list = new ArrayList<InetAddress>();
		if(ips==null||ips.length==0)return null;

		for(int i=0;i<ips.length;i++){
			try {
				System.out.println("---Config.getNotifyInetAdderssList:"+ips[i]+":"+InetAddress.getByName(ips[i]));
				list.add(InetAddress.getByName(ips[i]));
			}
			catch (UnknownHostException e){
				e.printStackTrace();
			}
		}

		return (InetAddress[])list.toArray(new InetAddress[0]);

	}

	/**
	 * 是否使用memcached server，不想使用关掉即可。
	 * @return
	 */
	public boolean useMemCached(){
		String s = props.getProperty("IS_USE_MEMCACHED");
		if("true".equalsIgnoreCase(s))return true;
		return false;
	}

	/**
	 * memcached server的IP地址
	 * @return
	 */
	public String getMemCacheServerIp(){
		return props.getProperty("MEMCACHED_SERVER");
	}

	/**
	 * 得到memcached server的端口
	 * @return
	 */
	public int getMemCacheServerPort(){
		String c = props.getProperty("MEMCACHED_SERVER_PORT");
		return Integer.parseInt(c);
	}

	public String getDataSourceRead(){
		return props.getProperty("DATA_SOURCE_READ");
	}

	public String getDataSourceWrite(){
		return props.getProperty("DATA_SOURCE_WRITE");
	}

	/**
	 * 得到对象缓存最大长度
	 * @return
	 */


	public long getCacheExpire(){
		String c = props.getProperty("CACHE_EXPIRE");
		return Integer.parseInt(c);
	}

	public long getCdbNum(){
		String c = props.getProperty("CDB_NUM");
		return Integer.parseInt(c);
	}

	public String getInitDbConf(){
		String c = props.getProperty("INIT_DB_CONF");
		return c;
	}


	//排行统计配置相关

	/**
	 * 获取容许执行统计操作的机器IP
	 */
	public String getListAllowOperIp () {
		String c = props.getProperty("LIST_ALLOW_OPER_IP");
		return c;
	}


	//---------------------add by肖磊---------
	/**
	 * 平台的app url
	 * @return
	 */
	public String getToAppUrl(){
		return props.getProperty("TOAPP_URL");
	}

	/**
	 * 获得语言类型
	 * @return
	 */
	public String getLanType(){
	return props.getProperty("LAN_TYPE");
	}

  /**
   * APP_ID
   * @return
   */
	public String getAppid(){
		return props.getProperty("APP_ID");

	}

	/**
	 * 游戏版本号
	 * @return
	 */
	public String getVersion(){
		return props.getProperty("GAME_VERSION");
	}

	/**
	 * API_KEY
	 *
	 * @return
	 */
	public String getApikey() {
		return props.getProperty("API_KEY");
	}

	/**
	 * SECERT_KEY
	 * @return
	 */
	public String getSecertkey(){
		return props.getProperty("SECRET_KEY");
	}



	/**
	 * 游戏地址
	 * @return
	 */
	public String getGameUrl(){
	 return props.getProperty("GAME_APP_URL");
	}

    /**
     * 游戏名称
     * @return
     */
	public String getGameName(){
	return props.getProperty("APP_NAME");
	}

	/**
	 * 是否debug
	 * @return
	 */
	public boolean IsDebug(){
		String isDeBug = props.getProperty("CUTE_DEBUG");
		if("true".equals(isDeBug)){
			return true;
		}

		return false;
	}


	/**
	 * 是否是opensocial平台
	 * @return
	 */
	public  boolean IsOpensocial(){
		String isOpensocial = props.getProperty("IS_OPENSOCIAL");
		if("true".equals(isOpensocial)){
			return true;
		}

		return false;
	}


	/**
	 * 是否是SNSPLUS REST API平台
	 * @return
	 */
	public  boolean IsSnsplus(){
		String isOpensocial = props.getProperty("IF_NSNPLUS_API");
		if("true".equals(isOpensocial)){
			return true;
		}

		return false;
	}

	/**
	 * 是否是SNSPLUS JS API平台
	 * @return
	 */
	public  boolean IsJsSnsplus(){
		String isOpensocial = props.getProperty("IF_NSNPLUS_JS_API");
		if("true".equals(isOpensocial)){
			return true;
		}

		return false;
	}


	/**
	 * 是否是采用snsplus 支付
	 * @return
	 */
	public  boolean IsSnsplusPay(){
		String isOpensocial = props.getProperty("IF_NSNPLUS_PAY_API");
		if("true".equals(isOpensocial)){
			return true;
		}

		return false;
	}


	/**
	 * HOST_UTL
	 * @return
	 */
	public  String getHostUrl(){
		return props.getProperty("HOST_URL");
	}

	/**
	 * IMAGES_HOST_URL
	 * @return
	 */
	public  String getImageHostUrl(){
		return props.getProperty("IMG_SRC");
	}


	/**
	 * 是否是ELEX API平台
	 * @return
	 */
	public  boolean IsElex(){
		String isOpensocial = props.getProperty("IF_ELEX_API");
		if("true".equals(isOpensocial)){
			return true;
		}

		return false;
	}

	/**
	 * 获得支付的密钥
	 * @return
	 */
	public String getPaySecertKey(){
		return props.getProperty("SECRET_KEY_PAY");
	}

	/**
	 * 是否开启统计服务
	 * @return
	 */
	public boolean IS_Business_Log(){
	String c = 	props.getProperty("IS_Business_Log");
	if("true".equalsIgnoreCase(c)){
		return true;
	}
	return false;
	}


	/**
	 * 国际化版本是东方还是西方
	 * @return
	 */
	public boolean IS_EAST(){
	String c = 	props.getProperty("IS_EAST");
	if("true".equalsIgnoreCase(c)){
		return true;
	}
	return false;
	}




}
